diff --git a/system/libraries/User_agent.php b/system/libraries/User_agent.php
index 33e8451..8c63924 100644
--- a/system/libraries/User_agent.php
+++ b/system/libraries/User_agent.php
@@ -33,6 +33,9 @@
 	var $is_browser	= FALSE;
 	var $is_robot	= FALSE;
 	var $is_mobile	= FALSE;
+
+	var $languages	= array();
+	var $charsets	= array();
 	
 	var $platform	= '';
 	var $browser	= '';
@@ -40,7 +43,6 @@
 	var $moble		= '';
 	var $robot		= '';
 
-
 	var $platforms = array (
 							'windows nt 6.0'	=> 'Windows Longhorn',
 							'windows nt 5.2'	=> 'Windows 2003',
@@ -55,12 +57,13 @@
 							'windows 95'		=> 'Windows 95',
 							'win95'				=> 'Windows 95',
 							'windows'			=> 'Unknown Windows OS',
-							'mac os x'			=> 'Mac OS X',
+							'os x'				=> 'Mac OS X',
+							'ppc mac'			=> 'Power PC Mac',
 							'freebsd'			=> 'FreeBSD',
 							'ppc'				=> 'Macintosh',
-							'sunos'				=> 'Sun Solaris',
 							'linux'				=> 'Linux',
 							'debian'			=> 'Debian',
+							'sunos'				=> 'Sun Solaris',
 							'beos'				=> 'BeOS',
 							'apachebench'		=> 'ApacheBench',
 							'aix'				=> 'AIX',
@@ -80,12 +83,21 @@
 							'Internet Explorer'	=> 'Internet Explorer',
 							'Shiira'			=> 'Shiira',
 							'Firefox'			=> 'Firefox',
+							'Chimera'			=> 'Chimera',
+							'Phoenix'			=> 'Phoenix',
+							'Firebird'			=> 'Firebird',
 							'Camino'			=> 'Camino',
+							'Netscape'			=> 'Netscape',
+							'OmniWeb'			=> 'OmniWeb',
 							'Mozilla'			=> 'Mozilla',
 							'Safari'			=> 'Safari',
 							'Konqueror'			=> 'Konqueror',
+							'icab'				=> 'iCab',
 							'Lynx'				=> 'Lynx',
-							'ANTFresco'			=> 'Fresco'
+							'Links'				=> 'Links',
+							'hotjava'			=> 'HotJava',
+							'amaya'				=> 'Amaya',
+							'IBrowse'			=> 'IBrowse'
 						);
 
 	var $mobiles = array(
@@ -488,7 +500,7 @@
 		
 		return FALSE;
 	}
-		
+			
 	// --------------------------------------------------------------------
 	
 	/**
@@ -535,6 +547,51 @@
 		return FALSE;
 	}
 	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Set the accepted languages
+	 *
+	 * @access	private
+	 * @return	void
+	 */			
+	function _set_languages()
+	{
+		if ((count($this->languages) == 0) AND isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) AND $_SERVER['HTTP_ACCEPT_LANGUAGE'] != '')
+		{
+			$languages = preg_replace('/(;q=.+)/i', '', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+			
+			$this->languages = explode(',', $languages);
+		}
+		
+		if (count($this->languages) == 0)
+		{
+			$this->languages = array('Undefined');
+		}	
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Set the accepted character sets
+	 *
+	 * @access	private
+	 * @return	void
+	 */			
+	function _set_charsets()
+	{	
+		if ((count($this->charsets) == 0) AND isset($_SERVER['HTTP_ACCEPT_CHARSET']) AND $_SERVER['HTTP_ACCEPT_CHARSET'] != '')
+		{
+			$charsets = preg_replace('/(;q=.+)/i', '', $_SERVER['HTTP_ACCEPT_CHARSET']);
+			
+			$this->charsets = explode(',', $charsets);
+		}
+		
+		if (count($this->charsets) == 0)
+		{
+			$this->charsets = array('Undefined');
+		}	
+	}
 
 	// --------------------------------------------------------------------
 	
@@ -578,12 +635,38 @@
 	// --------------------------------------------------------------------
 	
 	/**
+	 * Is this a referral from another site?
+	 *
+	 * @access	public
+	 * @return	bool
+	 */			
+	function is_referral()
+	{
+		return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? FALSE : TRUE;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Agent String
+	 *
+	 * @access	public
+	 * @return	string
+	 */			
+	function agent()
+	{
+		return $this->agent;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
 	 * Get Platform
 	 *
 	 * @access	public
 	 * @return	string
 	 */			
-	function get_platform()
+	function platform()
 	{
 		return $this->platform;
 	}
@@ -596,7 +679,7 @@
 	 * @access	public
 	 * @return	string
 	 */			
-	function get_browser()
+	function browser()
 	{
 		return $this->browser;
 	}
@@ -609,7 +692,7 @@
 	 * @access	public
 	 * @return	string
 	 */			
-	function get_version()
+	function version()
 	{
 		return $this->version;
 	}
@@ -622,7 +705,7 @@
 	 * @access	public
 	 * @return	string
 	 */				
-	function get_robot()
+	function robot()
 	{
 		return $this->robot;
 	}
@@ -634,11 +717,86 @@
 	 * @access	public
 	 * @return	string
 	 */			
-	function get_mobile()
+	function mobile()
 	{
 		return $this->mobile;
 	}
 	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get the referrer
+	 *
+	 * @access	public
+	 * @return	bool
+	 */			
+	function referrer()
+	{
+		return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : $_SERVER['HTTP_REFERER'];
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get the accepted languages
+	 *
+	 * @access	public
+	 * @return	array
+	 */			
+	function languages()
+	{
+		if (count($this->languages) == 0)
+		{
+			$this->_set_languages();
+		}
+	
+		return $this->languages;
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Get the accepted Character Sets
+	 *
+	 * @access	public
+	 * @return	array
+	 */			
+	function charsets()
+	{
+		if (count($this->charsets) == 0)
+		{
+			$this->_set_charsets();
+		}
+	
+		return $this->charsets;
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Test for a particular language
+	 *
+	 * @access	public
+	 * @return	bool
+	 */			
+	function accept_lang($lang = 'en')
+	{
+		return (in_array(strtolower($lang), $this->languages(), TRUE)) ? TRUE : FALSE;
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Test for a particular character set
+	 *
+	 * @access	public
+	 * @return	bool
+	 */			
+	function accept_charset($charset = 'utf-8')
+	{
+		return (in_array(strtolower($charset), $this->charsets(), TRUE)) ? TRUE : FALSE;
+	}
+	
 	
 }
 
